1. Technical Field
The present invention relates in general to a system and method for balancing computational load across a plurality of processors. More particularly, the present invention relates to a system and method for translating byte code into processor-specific object code at runtime based upon a computer system's environment.
2. Description of the Related Art
Computer systems are becoming more and more complex. The computer industry typically doubles the performance of a computer system every 18 months (i.e. personal computer, PDA, gaming console). In order for the computer industry to accomplish this task, the semiconductor industry produces integrated circuits that double in performance every 18 months. A computer system uses integrated circuits for particular functions based upon the integrated circuits' architecture. Two fundamental architectures are 1) microprocessor-based and 2) digital signal processor-based.
An integrated circuit with a microprocessor-based architecture is typically used to handle control operations whereas an integrated circuit with a digital signal processor-based architecture is typically designed to handle signal-processing manipulations (i.e. mathematical operations). As technology evolves, the computer industry and the semiconductor industry realize the importance of using both architectures, or processor types, in a computer system design.
Software is another element in a computer system that has been evolving alongside integrated circuit evolution. A software developer writes code in a manner that corresponds to the processor type that executes the code. For example, a processor has a particular number of registers and a particular number of arithmetic logic units (ALUs) whereby the software developer designs his code to most effectively use the registers and the ALUs.
As the semiconductor industry incorporates multiple processor types onto a single device, a challenge found for the software developer is to write code based upon a multiple processor type architecture. A software developer's code includes a plurality of subtasks whereby each subtask may be designed to run on a particular processor type. For example, a subtask that manages “control” operations is better suited to run on a microprocessor.
However, there are many subtasks that run adequately on either processor type. In this case, the subtask would be best run on a processor that is not heavily loaded at a particular time. A challenge found, however, is that existing art requires a software developer to identify a processor type at compilation, not at runtime.
Another challenge found in writing code is partitioning a set of tasks among a set of heterogeneous processors depending upon the processor topology of a particular client. For example, a client may retrieve a file from a remote server using a computer network, such as the Internet. In this example, the file may include multiple subtasks, each of which is optimized to execute on a particular processor type. Existing art, however, does not allow each subtask to be individually translated in an optimum format to run on an architecture that includes heterogeneous processors.
What is needed, therefore, is a system and method to dynamically select a processor to run a particular subtask at runtime based upon a computer system's environment.